home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / game / ponpon / ponpon4.bas < prev    next >
BASIC Source File  |  1995-08-18  |  41KB  |  928 lines

  1. 1000 '
  2. 1010 '飛んでけポンポン! by 尋燐・ルナ
  3. 1020 '  アバウト各局御用達
  4. 1030 ' V1.3 1994/10/19 初代TOWNS誌用
  5. 1040 ' V4.4 1995/06/23  フリコレ11用
  6. 1050 :
  7. 1060  CLEAR ,,,1500000                   :'配列用にスペース開ける
  8. 1070  DEFSTR A                           :'以後Aで始まる変数は文字型
  9. 1080 :
  10. 1090  GOSUB *タイトル          :WAIT 200 :'タイトル画面
  11. 1100  GOSUB *初期設定                    :'各種設定
  12. 1110  GOSUB *WIND                        :'DATA読み込み窓
  13. 1120  GOSUB *D_LOAD                      :'得点データの読み込み
  14. 1130  GOSUB *D_LOAD2                     :'名前データの読み込み
  15. 1140  GOSUB *効果音            :WAIT 100 :'音データ読み込み
  16. 1150  GOSUB *サブメニュー                :'説明等のメニュー
  17. 1160  ON NO+1 GOTO 1220,1170,1180,1190,1200,1210
  18. 1170  :GOSUB *MENU2 :GOTO 1150           :'ポンポンについて
  19. 1180  :GOSUB *MENU3 :GOTO 1150           :'ゲームの説明
  20. 1190  :GOSUB *MENU4 :GOTO 1150           :'ガンの説明
  21. 1200  :GOSUB *MENU5 :GOTO 1150           :'速度について
  22. 1210  :F=1 :GOSUB *M_終了:GOTO *おわり   :'終了
  23. 1220  GOSUB *速度設定                    :'専用による速度設定
  24. 1230  SCREEN@ 0 :PALETTE :SCREEN 1,0,0,1 :'画面設定 背景作画/見せない
  25. 1240  GOSUB *その場                      :'各種画像データのセット
  26. 1250  GOSUB *表示                        :'スコア表示
  27. 1260   WHILE I=1
  28. 1270    CLS :WAIT 10:SCREEN 1,0,3,1      :'画面設定 背景をアクティブに
  29. 1280    GOSUB *各種背景                  :'動かない物(背景)を描く
  30. 1290    SCREEN 1,1,3,1 :SCREEN@ 0 :CLS   :'画面設定 前景をアクティブに
  31. 1300    GOSUB *各種前景                  :'動く物の表示
  32. 1310    IF FGO THEN OUT &H5EC,0          :'TOWNS2の人は 互換モード
  33. 1320     GOSUB *開始                     :'**ゲーム本体**
  34. 1330    IF FGO THEN OUT &H5EC,1          :'TOWNS2の人は 高速モード
  35. 1340    GOSUB *表示S                    :'スコア表示
  36. 1350    GOSUB *名前記入                  :'ハイスコアなら名前登録
  37. 1360    GOSUB *表示                      :'スコア表示 :(or 終了?)
  38. 1370   WEND                              :'もう一度するならジャンプ
  39. 1380  GOSUB *D_SAVE                      :'データの書き込み
  40. 1390  GOSUB *タイトル                    :'タイトル画面
  41. 1400  GOTO 1150                          :'メニューに戻る
  42. 1410 :
  43. 1420 *おわり
  44. 1430  WAIT 200
  45. 1440 END
  46. 1450 :
  47. 1460 '=============== S U B  ================
  48. 1470 *初期設定
  49. 1480  ANA="" :FF=1                       :'0=QKS 1=QKR専用
  50. 1490  FM=0                               :'OUTエリア表示
  51. 1500  FT=0                               :'TESTモード
  52. 1510  FG=1                               :'GAME番号
  53. 1520  FS=1                               :'二段打ち
  54. 1530  FGO=0                              :'互換モード
  55. 1540  AVOL="V4.4"                        :'バージョン
  56. 1550  ADD="" :AD=""                      :'データDrive
  57. 1560  KAISU=10                           :'試技数
  58. 1570  RANDOMIZE TIME                     :'乱数の系列を変更
  59. 1580  DIM TEN(2),HI(21),ATEN(22)         :'スコア /点数記録 /日時
  60. 1590  DIM HI2(21,2),ATEN2(22)            :'G2用  /LEVEL・回数・Double /日時
  61. 1600  DIM YA(8000)                       :'弾*15個
  62. 1610  DIM HATA(18500)                    :'旗移動用
  63. 1620  DIM SYO(4400)                      :'照準表示用
  64. 1630  DIM TN(200)                        :'点数移動用
  65. 1640  DIM TIT(200)                       :'タイトル表示用
  66. 1650  DIM WIN(300)                       :'風表示用
  67. 1660  DIM PW(400)                        :'力表示用
  68. 1670  DIM AN(26)                         :'登録名 (A-Z)
  69. 1680  I=0 :S=0                           :'汎用変数
  70. 1690 RETURN
  71. 1700 :
  72. 1710 '-----------------------------------
  73. 1720 *効果音                             :'音データ読込
  74. 1730  ON ERROR GOTO *E_効果音
  75. 1740  X=X0 :Y=Y0 :X1=X+160 :Y1=Y+23 :GOSUB *K_SUB
  76. 1750  SYMBOL (X+5,Y+5),"効果音データの読込",1,1,5,,,1
  77. 1760 :
  78. 1770  DIM SND1(15000)                    :'弾飛んでいる時の音
  79. 1780   I=3 :A="henshin.snd" :GOSUB *K_SUB2
  80. 1790   IF AD="Q:" THEN A="\FJ2\SE\CARTOON\"+A
  81. 1800   LOAD@ AD+A,SND1
  82. 1810  DIM SND2(49000)                    :'拍手
  83. 1820   I=4 :A="applause.snd" :GOSUB *K_SUB2
  84. 1830   IF AD="Q:" THEN A="\FJ2\SE\PEOPLE\"+A
  85. 1840   LOAD@ AD+A,SND2
  86. 1850  DIM SND3(50000)                    :'強風
  87. 1860   I=5 :A="chilly_w.snd" :GOSUB *K_SUB2
  88. 1870   IF AD="Q:" THEN A="\FJ2\SE\NATURE\"+A
  89. 1880   LOAD@ AD+A,SND3
  90. 1890  DIM SND4(46000)                    :'笑い
  91. 1900   I=6 :A="laughter.snd" :GOSUB *K_SUB2
  92. 1910   IF AD="Q:" THEN A="\FJ2\SE\PEOPLE\"+A
  93. 1920   LOAD@ AD+A,SND4
  94. 1930  DIM SND5(51000)                    :'歓声
  95. 1940   I=7 :A="audi_1.snd" :GOSUB *K_SUB2
  96. 1950   IF AD="Q:" THEN A="\FJ2\SE\SPORTS\"+A
  97. 1960   LOAD@ AD+A,SND5
  98. 1970  DIM SND6(9000)                     :'割れる音
  99. 1980   I=8 :A="crack.snd" :GOSUB *K_SUB2
  100. 1990   IF AD="Q:" THEN A="\FJ2\SE\DOMESTIC\"+A
  101. 2000   LOAD@ AD+A,SND6
  102. 2010  DIM SND7(5000)                     :'お疲れ
  103. 2020   I=9 :A="otuka_f.snd" :GOSUB *K_SUB2
  104. 2030   IF AD="Q:" THEN A="\FJ2\MSG\GREETING\"+A
  105. 2040   LOAD@ AD+A,SND7
  106. 2050  DIM SND8(29000)                    :'日本CHA
  107. 2060   I=10 :A="jpncha.snd" :GOSUB *K_SUB2
  108. 2070   IF AD="Q:" THEN A="\FJ2\SE\SPORTS\"+A
  109. 2080   LOAD@ AD+A,SND8
  110. 2090 :
  111. 2100  DIM SND11(47000)                   :'ピーポー
  112. 2110   I=11 :A="ambulnce.snd" :GOSUB *K_SUB2
  113. 2120   IF AD="Q:" THEN A="\FJ2\SE\VEHICLE\"+A
  114. 2130   LOAD@ AD+A,SND11
  115. 2140  DIM SND12(3500)                    :'だめだめ
  116. 2150   I=12 :A="dameda_f.snd" :GOSUB *K_SUB2
  117. 2160   IF AD="Q:" THEN A="\FJ2\MSG\WARNING\"+A
  118. 2170   LOAD@ AD+A,SND12
  119. 2180  DIM SND13(3000)                    :'危ない
  120. 2190   I=13 :A="abunai_f.snd" :GOSUB *K_SUB2
  121. 2200   IF AD="Q:" THEN A="\FJ2\MSG\WARNING\"+A
  122. 2210   LOAD@ AD+A,SND13
  123. 2220 :
  124. 2230  AD=""                 :'--ドライブ指定をカレント換える/自作音
  125. 2240  DIM SND9(4000)                     :'GUN
  126. 2250   I=14 :A="gun.snd" :GOSUB *K_SUB2
  127. 2260   LOAD@ A,SND9
  128. 2270  DIM SND10(10000)                    :'GUN2
  129. 2280   I=15 :A="hit4.snd" :GOSUB *K_SUB2
  130. 2290   LOAD@ A,SND10
  131. 2300  AD=ADD                :'--ドライブ指定を元に戻す
  132. 2310  ON ERROR GOTO 0
  133. 2320  I=0 :A="終了" :GOSUB *K_SUB2
  134. 2330 RETURN
  135. 2340 :
  136. 2350 '--------------
  137. 2360 *E_効果音       :'読込エラー
  138. 2370  GOSUB 2550
  139. 2380  DIM DMY(7000)
  140. 2390  X0=230 :Y0=160 :BEEP
  141. 2400  X=X0 :Y=Y0 :X1=X+210 :Y1=Y+120
  142. 2410  GET@A (X0-1,Y0-1)-(X1+1,Y1+1),DMY :GOSUB *K_SUB1
  143. 2420  X=X+10 :Y=Y+10 :X1=X+190 :Y1=Y+25 :GOSUB *K_SUB1
  144. 2430  SYMBOL (X+8,Y+4),"エラーが発生致しました",1,1,%108,,,1
  145. 2440  SYMBOL (X+130,Y+30),"err="+STR$(ERR),1,1,1
  146. 2450  SYMBOL (X+10,Y+40),"読み込み処理を",1,1,5,,,1
  147. 2460  SYMBOL (X+10,Y+60),"    継続する・・・実行",1,1,3,,,1
  148. 2470  SYMBOL (X+10,Y+80),"    中止する・・・取消",1,1,3,,,1
  149. 2480  CONNECT (X+30,Y+58)-(X+30,Y+100)-(X+170,Y+100)-(X+170,Y+47)-(X+125,Y+47),3
  150. 2490  A=INPUT$(1) :IF A<>CHR$(13) THEN 2600
  151. 2500   PUT@A (X0-1,Y0-1)-(X0+211,Y0+121),DMY  :'エラーメッセージ
  152. 2510   ERASE DMY
  153. 2520   GOSUB 2550
  154. 2530   RESUME
  155. 2540 :
  156. 2550 '--- 変数退避 ---
  157. 2560 SWAP I0,X :SWAP I1,Y :SWAP I2,X0 :SWAP I3,Y0 :SWAP I4,X1 :SWAP I5,Y1
  158. 2570 SWAP A0,A
  159. 2580 RETURN
  160. 2590 :
  161. 2600 '--- エラー終了 ---
  162. 2610  F=0 :GOSUB *M_終了
  163. 2620 END
  164. 2630 :
  165. 2640 '------------------------------------読み込み窓を作る
  166. 2650 *WIND
  167. 2660  X0=100 :Y0=310
  168. 2670  X=X0-5 :Y=Y0-5 :X1=X+170 :Y1=Y+100 :GOSUB *K_SUB1
  169. 2680  X=X0 :Y=Y0 :X1=X+160 :Y1=Y+23 :GOSUB *K_SUB
  170. 2690  Y=Y+25 :X1=X+50 :Y1=Y+23 :GOSUB *K_SUB
  171. 2700  SYMBOL (X+5,Y+5),"Drive",1,1,5
  172. 2710  Y=Y+25 :X1=X+50 :Y1=Y+23 :GOSUB *K_SUB
  173. 2720  SYMBOL (X+5,Y+5),"File",1,1,5
  174. 2730  X=X0+52 :Y=Y0+25 :X1=X+108 :Y1=Y+23 :GOSUB *K_SUB
  175. 2740  X=X0+52 :Y=Y+25 :X1=X+108 :Y1=Y+23 :GOSUB *K_SUB
  176. 2750   FOR I=1 TO 15
  177. 2760    LINE (X0-2+I*10,Y0+80)-(X0+5+I*10,Y0+85),PSET,2,BF
  178. 2770   NEXT
  179. 2780 RETURN
  180. 2790 :
  181. 2800 *K_SUB1                             :'窓表示
  182. 2810  LINE (X-1,Y-1)-(X1+1,Y1+1),PSET,0,B
  183. 2820 *K_SUB                              :'窓表示
  184. 2830  LINE (X,Y)-(X1,Y1),PSET,%200,BF
  185. 2840  LINE (X,Y)-(X1,Y1),PSET,0,B
  186. 2850  LINE (X+1,Y+1)-(X1-1,Y1-1),PSET,0,B
  187. 2860  CONNECT (X,Y1)-(X,Y)-(X1,Y),7
  188. 2870  CONNECT (X+1,Y1-1)-(X+1,Y+1)-(X1-1,Y+1),7
  189. 2880 RETURN
  190. 2890 :
  191. 2900 *K_SUB2                             :'ゲージ表示
  192. 2910  X=X0+52 :Y=Y0+25 :X1=X+108 :Y1=Y+23 :GOSUB *K_SUB
  193. 2920  IF AD="" THEN A0="カレント"
  194. 2930  IF AD="Q:" THEN A0="CD"
  195. 2940  IF AD="A:" THEN A0="Aフロッピー"
  196. 2950  IF AD="B:" THEN A0="Bフロッピー"
  197. 2960  SYMBOL (X0+60,Y0+30),A0,1,1,0
  198. 2970  IF I=0 THEN 2990
  199. 2980  LINE (X0-2+I*10,Y0+80)-(X0+5+I*10,Y0+85),PSET,%156,BF
  200. 2990  X=X0+52 :Y=Y0+25+25 :X1=X+108 :Y1=Y+23 :GOSUB *K_SUB
  201. 3000  SYMBOL (X+5,Y+5),A,1,1,6
  202. 3010 RETURN
  203. 3020 :
  204. 3030 '--------------------------------------
  205. 3040 *D_LOAD                              :'データの読み込み
  206. 3050  X=X0 :Y=Y0 :X1=X+160 :Y1=Y+23 :GOSUB *K_SUB
  207. 3060  SYMBOL (X+5,Y+5),"得点DATAの読み込み",1,1,5,,,1
  208. 3070  I=1 :AD="" :A="PONPON.DAT" :GOSUB *K_SUB2
  209. 3080  ON ERROR GOTO 3250
  210. 3090   OPEN "I",#1,"PONPON.DAT"
  211. 3100    INPUT #1,A
  212. 3110    INPUT #1,A
  213. 3120     FOR I=1 TO 20                    :'GAME1
  214. 3130       INPUT #1,HI(I) :LINE INPUT #1,ATEN(I)
  215. 3140     NEXT
  216. 3150    INPUT #1,A
  217. 3160     FOR I=1 TO 20                    :'GAME2
  218. 3170      FOR I0=0 TO 2
  219. 3180        INPUT #1,HI2(I,I0)
  220. 3190      NEXT
  221. 3200      LINE INPUT #1,ATEN2(I)
  222. 3210     NEXT
  223. 3220   CLOSE
  224. 3230  ON ERROR GOTO 0
  225. 3240 RETURN
  226. 3250  IF ERR<>63 THEN PRINT ERR;"/";ERL :STOP  :'Data Failが無いときは作る
  227. 3260 :
  228. 3270 '--読込エラー窓
  229. 3280  BEEP
  230. 3290  DIM DMY(4500)
  231. 3300  X=275 :Y=330 :X1=X+150 :Y1=Y+107
  232. 3310  GET@A (X-1,Y-1)-(X1+1,Y1+1),DMY :GOSUB *K_SUB1
  233. 3320  SYMBOL (X+10,Y+10),"得点データが",1,1,5,,,1
  234. 3330  SYMBOL (X+50,Y+30),"有りません!",1,1,5,,,1
  235. 3340  LINE (X+10,Y+50)-(X1-10,Y+50),PSET,1
  236. 3350  SYMBOL (X+10,Y+60),"新規に作成",1,1,3,,,1
  237. 3360  SYMBOL (X+50,Y+80),"致しますネ。",1,1,3,,,1
  238. 3370  WAIT 150 :GOSUB 3630
  239. 3380  PUT@A (X-1,Y-1)-(X1+1,Y1+1),DMY
  240. 3390  ERASE DMY
  241. 3400 RESUME 3230 
  242. 3410 :
  243. 3420 *D_LOAD2                              :'登録名データの読み込み
  244. 3430  X=X0 :Y=Y0 :X1=X+160 :Y1=Y+23 :GOSUB *K_SUB
  245. 3440  SYMBOL (X+5,Y+5),"名前DATAの読み込み",1,1,5,,,1
  246. 3450  I=2 :AD="" :A="PONPON.NAM" :GOSUB *K_SUB2
  247. 3460   OPEN "I",#1,"PONPON.NAM"
  248. 3470    INPUT #1,A :INPUT #1,ADD           :'ドライブ読み込み
  249. 3480    INPUT #1,A :INPUT #1,A :FGO=VAL(A) :'互換モード
  250. 3490    INPUT #1,A :INPUT #1,ANA           :'機種設定
  251. 3500    INPUT #1,A                         :'ダミー
  252. 3510     FOR I=1 TO 26                     :'26までのデータを読む
  253. 3520       INPUT #1,A :INPUT #1,AN(I)
  254. 3530     NEXT
  255. 3540   CLOSE
  256. 3550  IF ADD="*" THEN ADD="" :AD=ADD
  257. 3560  IF ADD="CD" OR ADD="Q" OR ADD="Q:" THEN ADD="Q:" :AD=ADD
  258. 3570  IF ADD="A" OR ADD="A:" THEN ADD="A:" :AD=ADD
  259. 3580  IF ADD="B" OR ADD="B:" THEN ADD="B:" :AD=ADD
  260. 3590 RETURN
  261. 3600 :
  262. 3610 *D_SAVE                               :'データの書き込み
  263. 3620  KILL "PONPON.DAT"                    :'古いデータを消す 
  264. 3630   OPEN "O",#1,"PONPON.DAT"            :'全てのエラーで中断。注意!
  265. 3640    PRINT #1,"**飛んでけポンポン!**"
  266. 3650    PRINT #1,"--- GAME 1用 ---"
  267. 3660     FOR I=1 TO 20                     :'GAME1
  268. 3670       PRINT #1,HI(I) :PRINT #1,ATEN(I)
  269. 3680     NEXT
  270. 3690    PRINT  #1,"--- GAME 2用 ---"
  271. 3700     FOR I=1 TO 20                    :'GAME2
  272. 3710      FOR I0=0 TO 2
  273. 3720        PRINT #1,HI2(I,I0)
  274. 3730      NEXT
  275. 3740      PRINT #1,ATEN2(I)
  276. 3750     NEXT
  277. 3760   CLOSE
  278. 3770 RETURN
  279. 3780 :
  280. 3790 '-----------------------------------
  281. 3800 *速度設定      :'FGO=1 互換モード
  282. 3810  IF ANA="QKS" THEN FF=0
  283. 3820  IF ANA="T-1" THEN FF=0    :'386/16MHz
  284. 3830  IF ANA="QKR" THEN FF=1
  285. 3840  IF ANA="T-2" THEN FF=1    :'486/33MHz
  286. 3850  IF ANA="OD"  THEN FF=2
  287. 3860  IF ANA="PENT" THEN FF=3
  288. 3870  IF FGO THEN FF=0          :'互換モードONなら386速度
  289. 3880 RETURN
  290. 3890 :
  291. 3900 '-------------------------------------
  292. 3910 *サブメニュー
  293. 3920  X0=100 :Y0=260
  294. 3930  X=X0-5 :Y=Y0-5 :X1=X+170 :Y1=Y+190 :GOSUB *K_SUB1
  295. 3940  SYMBOL (X0+10,Y0+3),"* M E N U *",1,1,%10,,,5
  296. 3950  RESTORE 3950
  297. 3960   FOR I=0 TO 5     :'表示
  298. 3970    X=X0+10 :Y=Y0+I*25+25
  299. 3980    X1=X+140 :Y1=Y+20
  300. 3990    GOSUB *K_SUB1
  301. 4000    READ A
  302. 4010    SYMBOL (X0+15,Y0+I*25+27),A,1,1,%88,,,1
  303. 4020   NEXT
  304. 4030  DATA "ゲーム開始!","ポンポンとは?","ゲームの説明書","ガンの取扱説明書","動作速度について","残念ながらやめる"
  305. 4040 :
  306. 4050  NO=0              :'選択
  307. 4060   IF NO<0 THEN NO=5
  308. 4070   IF NO>5 THEN NO=0
  309. 4080  GOSUB *反転
  310. 4090  WAIT 15
  311. 4100 :
  312. 4110  A=INKEY$ :IF A<>"" THEN 4160  :'キ-入力
  313. 4120  I=PAD(1)                      :'パッド入力
  314. 4130   IF I=1 THEN A=CHR$(30)
  315. 4140   IF I=5 THEN A=CHR$(31)
  316. 4150  :
  317. 4160   IF A=CHR$(31) OR A=CHR$(28) THEN GOSUB *反転 :NO=NO+1 :GOTO 4060
  318. 4170   IF A=CHR$(30) OR A=CHR$(29) THEN GOSUB *反転 :NO=NO-1 :GOTO 4060
  319. 4180   IF A="R" OR A="r" THEN GOSUB *アバウトメッセージ :GOTO *サブメニュー
  320. 4190   IF A<>CHR$(13) AND PTRIG(1)<>1 THEN 4110
  321. 4200 RETURN
  322. 4210 :
  323. 4220 *反転
  324. 4230  X=X0+10 :Y=Y0+NO*25+25 :X1=X+140 :Y1=Y+20
  325. 4240  LINE (X,Y)-(X1,Y1),XOR,7,B
  326. 4250  LINE (X+1,Y+1)-(X1-1,Y1-1),XOR,7,B
  327. 4260  SYMBOL (X-15,Y+2),"・",1,1,4,,XOR
  328. 4270  SYMBOL (X+140,Y+2),"・",1,1,4,,XOR
  329. 4280 RETURN
  330. 4290 :
  331. 4300 '---------------------------------------------
  332. 4310 *表示S                                       :'記録の更新
  333. 4320  ON FG GOTO *表示S1,*表示S2
  334. 4330 *表示S1                                       :'G1用
  335. 4340  HI(21)=TEN(0) :ATEN(21)="" :S=21             :'取り合えず最下位に記録
  336. 4350  FOR I=0 TO 2 :ATEN(21)=ATEN(21)+RIGHT$("     "+STR$(TEN(I)),7) :NEXT :'今回の記録を制作
  337. 4360  ATEN(21)=ATEN(21)+"  "+LEFT$(ATEN(22)+"     ",5)+"  "+ATEN(0) 
  338. 4370  FOR I=20 TO 1 STEP -1                        :'順位入れ換え
  339. 4380   IF HI(I)<HI(I+1) THEN SWAP HI(I),HI(I+1) :SWAP ATEN(I),ATEN(I+1) :S=S-1
  340. 4390  NEXT
  341. 4400 RETURN
  342. 4410 :
  343. 4420 *表示S2                                       :'G2用
  344. 4430  CT=CT-1
  345. 4440  HI2(21,0)=LV :HI2(21,1)=CT :S=21             :'取り合えず最下位に記録
  346. 4450  A=" "+RIGHT$("     "+AKCNV$(STR$(LV)),6)     :'今回の記録 LEVEL
  347. 4460  A=A+RIGHT$("     "+STR$(INT((LV/CT)*1000)/10),7)        :'確率
  348. 4470  A=A+" "+RIGHT$("     "+AKCNV$(STR$(HI2(21,2))),6)       :'Double
  349. 4480  A=A+"  "+LEFT$(ATEN2(22)+"     ",5)+"  "+ATEN2(0)       :'撃墜
  350. 4490  ATEN2(21)=A
  351. 4500  FOR I=20 TO 1 STEP -1                        :'順位入れ換え
  352. 4510   IF HI2(I,0)<HI2(I+1,0) THEN SWAP HI2(I,0),HI2(I+1,0) :SWAP ATEN2(I),ATEN2(I+1) :S=S-1
  353. 4520   IF HI2(I,0)=HI2(I+1,0) THEN IF HI2(I,1)>HI2(I+1,1) THEN SWAP HI2(I,0),HI2(I+1,0) :SWAP ATEN2(I),ATEN2(I+1) :S=S-1
  354. 4530  NEXT
  355. 4540 RETURN
  356. 4550 :
  357. 4560 *表示                                          :'記録の表示
  358. 4570  SCREEN 0 :CLS :COLOR 7,,,4
  359. 4580  LINE (0,0)-(639,16),PSET,%4,BF
  360. 4590  LINE (400,440)-(639,475),PSET,%1,BF
  361. 4600  LINE (0,440)-(399,475),PSET,%7,BF
  362. 4610  LINE (0,418)-(639,439),PSET,%5,BF
  363. 4620  RESTORE 4620 :DATA 35,236,292,348,404,465
  364. 4630   FOR I=1 TO 6
  365. 4640    READ I0 :LINE (I0,0)-(I0,415),PSET,5,,&H4444
  366. 4650   NEXT
  367. 4660  LINE (0,397)-(639,397),PSET,6,,&H4444
  368. 4670  ON FG GOTO 4690,4810,4950
  369. 4680 '--G1--
  370. 4690  SYMBOL (420,450),"GAME-1 ( 十射 )",1,1,7,,,1,4
  371. 4700  SYMBOL (20,450),"弾を10回撃ってその合計点を競います。",1,1,6,,,1
  372. 4710  PRINT "順位     名  前                 得点   High    Low   撃墜   日  時"
  373. 4720 : IF S=1 THEN PCMPLAY SND5,127                  :'1位の歓声
  374. 4730  IF S>1 AND S<11 THEN PCMPLAY SND2,127         :'10位以内拍手 
  375. 4740  IF S>10 AND S<21 THEN PCMPLAY SND7,127        :'お疲れ
  376. 4750   FOR I=1 TO 20
  377. 4760    IF I=S THEN COLOR 6 ELSE COLOR 7            :'記録更新?
  378. 4770    PRINT RIGHT$(" "+STR$(I),3)+"  "+ATEN(I)    :'記録表示
  379. 4780   NEXT
  380. 4790  IF S=21 THEN COLOR 6 :PRINT "番外"+SPACE$(25)+ATEN(I)
  381. 4800 GOTO 5000
  382. 4810 '--G2--
  383. 4820  SYMBOL (420,450),"GAME-2 ( 遠射 )",1,1,7,,,1,4
  384. 4830  SYMBOL (10,450),"規定回数内に皿を割ります。何枚割ったかを競います",1,1,6,,,1
  385. 4840  PRINT "順位     名  前                Level   率 % Double   撃墜   日  時"
  386. 4850  IF S=1 THEN PCMPLAY SND5,127                  :'1位の歓声
  387. 4860  IF S>1 AND S<11 THEN PCMPLAY SND2,127         :'10位以内拍手 
  388. 4870  IF S>10 AND S<21 THEN PCMPLAY SND7,127        :'お疲れ
  389. 4880   FOR I=1 TO 20
  390. 4890    IF I=S THEN COLOR 6 ELSE COLOR 7            :'記録更新?
  391. 4900    PRINT RIGHT$(" "+STR$(I),3)+"  "+ATEN2(I)   :'記録表示
  392. 4910   NEXT
  393. 4920  IF S=21 THEN COLOR 6 :PRINT "番外"+SPACE$(25)+ATEN2(I)
  394. 4930 GOTO 5000
  395. 4940 :
  396. 4950 '--G3--
  397. 4960 :
  398. 4970 :
  399. 4980 :
  400. 4990 '** メニュー **
  401. 5000  COLOR 7 :LOCATE 0,22
  402. 5010  SYMBOL (10,420),"ゲーム選択 <Select> ・Start <Run> ・終了 <B>",1,1,7,,,1
  403. 5020  WAIT 50 :A=""
  404. 5030  LINE (550,419)-(639,439),PSET,%5,BF
  405. 5040  SYMBOL (480,422),"(Soft12)",1,1,%7
  406. 5050   SYMBOL (550,420),A,1,1,%7
  407. 5060  A=INKEY$
  408. 5070   IF A="S" OR A="s" THEN GOSUB *D_SAVE :A="Save" :GOTO 5030
  409. 5080   IF A="O" OR A="o" THEN FM=-(FM=0) :A="Out/"+STR$(FM) :GOTO 5030
  410. 5090   IF A="F" OR A="f" THEN FF=-(FF=0) :A="Frag/"+STR$(FF):GOTO 5030
  411. 5100   IF A="T" OR A="t" THEN FT=-(FT=0) :A="Test/"+STR$(FT):GOTO 5030
  412. 5110   IF A="1" THEN LOCATE 0,23 :PRINT "GAME1" :FG=1 :GOTO *表示
  413. 5120   IF A="2" THEN LOCATE 0,23 :PRINT "GAME2" :FG=2 :GOTO *表示
  414. 5130   IF A=CHR$(13) THEN I=1 :RETURN
  415. 5140  I=PTRIG(1)                            :'パッドの入力
  416. 5150   IF I=8 THEN FG=1-(FG=1) :GOTO *表示  :'ゲーム選択    
  417. 5160   IF I=4 THEN I=1                      :'RUN
  418. 5170   IF I=0 OR I>2 THEN 5060              :'1=実行 2=終了
  419. 5180 RETURN
  420. 5190 :
  421. 5200 *名前記入
  422. 5210  SCREEN 0 :CLS
  423. 5220  IF S>20 THEN RETURN                     :'番外
  424. 5230  SYMBOL (50,50),"ランキング"+AKCNV$(STR$(S))+"位",3,3,4,,,5
  425. 5240  LINE (40,40)-(500,105),PSET,5,B
  426. 5250  IF S=1 THEN PCMPLAY SND5,127                  :'1位の歓声
  427. 5260  IF S>1 AND S<11 THEN PCMPLAY SND2,127         :'10位以内拍手 
  428. 5270  LOCATE 0,10 :PRINT "おめでとうございます。"
  429. 5280  PRINT "  名前を登録致します。"
  430. 5290  INPUT ">",A
  431. 5300  AN(0)=A
  432. 5310  IF LEN(A)<>1 THEN 5340
  433. 5320  IF A>="A" AND A<="Z" THEN AN(0)=AN(ASC(A)-64)
  434. 5330  IF A>="a" AND A<="z" THEN AN(0)=AN(ASC(A)-96)
  435. 5340  PRINT AN(0) :WAIT 100
  436. 5350  A=LEFT$(AN(0)+SPACE$(30),24)
  437. 5360  IF FG=1 THEN ATEN(S)=A+ATEN(S)
  438. 5370  IF FG=2 THEN ATEN2(S)=A+ATEN2(S)
  439. 5380 RETURN
  440. 5390 :
  441. 5400 *タイトル
  442. 5410  CLS :SCREEN 0 :SCREEN@ 2
  443. 5420  LOAD@ "P_TITLE.TIF"
  444. 5430 RETURN
  445. 5440 :
  446. 5450 '----------------------------------------------
  447. 5460 *その場                                        :'各種設定等
  448. 5470  CX=300 :CY=300                                :'的センターの座標
  449. 5480 '--- 弾 ----
  450. 5490  YS=60
  451. 5500   FOR I=1 TO 15                                :'15段表示
  452. 5510    II=I-1 :OO=480
  453. 5520    CIRCLE (100,100),I,7,,,,F                   :'弾を描く
  454. 5530    GET@A (70,70)-(130,130),YA,II*OO            :'読み込み
  455. 5540   NEXT
  456. 5550 '---- 旗 ----
  457. 5560  RESTORE 5560
  458. 5570   CONNECT (499,200)-(460,150)-(499,100),6      :'旗表示
  459. 5580   LINE (350,130)-(460,170),PSET,7,BF,&H0707070770707070
  460. 5590   SYMBOL (355,133),"大会本部より",1,1,4,,,3
  461. 5600   SYMBOL (355,152),"  お知らせ",1,1,4,,,3
  462. 5610   CONNECT (500,210)-(500,90)-(610,150)-(500,210),%2
  463. 5620    FOR I=0 TO 3                                :'メッセージ表示
  464. 5630     PAINT (510,150),0,%2 :PAINT (510,150),2,%2
  465. 5640     READ A :SYMBOL (505,130),A,1,1,7,,,5
  466. 5650     READ A :SYMBOL (505,150),A,1,1,7,,,5
  467. 5660     GET@A (350,90)-(630,210),HATA,I*4500       :'読み込み
  468. 5670    NEXT
  469. 5680  DATA "ゲーム"," 開始!","強風の為","一時中断!"
  470. 5690  DATA "ゲーム"," 終了!","ど真ん中"," 偉い!
  471. 5700 '---- 照準 ----  
  472. 5710   FOR I=1 TO 0 STEP -1                         :'2種類の照準を描く
  473. 5720    LINE (270,340)-(370,340),PSET,3+I*2
  474. 5730    LINE (320,290)-(320,390),PSET,3+I*2
  475. 5740    CIRCLE (320,340),20,0,,,,F
  476. 5750    IF I=0 THEN SYMBOL (330,290),"S.L.",1,1,3
  477. 5760    GET@A (250,280)-(390,400),SYO,I*2200        :'読み込み
  478. 5770   NEXT
  479. 5780  SX=100 :SY=100                                :'照準の座標
  480. 5790 RETURN
  481. 5800 :
  482. 5810 *各種背景                                      :'動かない物の表示
  483. 5820 '---- 回数 ----
  484. 5830  LINE (450,10)-(630,40),PSET,7,B
  485. 5840  LINE (451,11)-(629,39),PSET,%7,BF
  486. 5850  SYMBOL (470,18),"第      回目の試技",1,1,5,,,5
  487. 5860 '---- 得点 ----
  488. 5870  IF FG=2 THEN 5900
  489. 5880   SYMBOL (120,27),"現在の得点:      AVE.:     H:    L:",1,1,7,,,1
  490. 5890   SYMBOL (120,45),"順位:        toTOP:       toNEXT:",1,1,7,,,1
  491. 5900 '---- タイトル ----
  492. 5910  SYMBOL (0,40),"飛んでけ",1,1,6,,,1
  493. 5920  SYMBOL (0,60)," ポンポン!",1,1,6,,,1
  494. 5930  LINE (0,80)-(100,80),PSET,4
  495. 5940   FOR I=1 TO 100                          :'タイトルを右上がりにする
  496. 5950    GET@A (I,40)-(I,150),TIT
  497. 5960    PUT@A (I,40-I/2)-(I,150-I/2),TIT
  498. 5970   NEXT
  499. 5980  SYMBOL (60,55),AVOL,1,1,5,,,3,3
  500. 5990  SYMBOL (0,465),"尋燐・ルナ",1,1,%5,,,1
  501. 6000 '---- 的 と土 ----
  502. 6010  ON FG GOTO 6020,6150                          :'GAME2ならJMP
  503. 6020   LINE (CX-250,120)-(CX+100,CY+70),PSET,%5     :'吊り紐
  504. 6030   LINE (CX+250,120)-(CX-100,CY+70),PSET,%5
  505. 6040   CIRCLE (CX,CY),50,%4,,,,F                    :'的
  506. 6050   CIRCLE (CX,CY),30,%5,,,,F
  507. 6060   CIRCLE (CX,CY),10,%6,,,,F
  508. 6070   IF FM THEN CIRCLE (CX,CY),70,%5,,,,,,&H4444  :'OUTゾーン
  509. 6080   IF FM THEN CIRCLE (CX,CY),80,%5,,,,,,&H4444  :'OUTゾーン
  510. 6090   Y=370 :I=1                                   :'土
  511. 6100   Y=Y+I :LINE (0,Y+I)-(550,Y+I),PSET,%6
  512. 6110   I=I+1 :IF (Y+I)<480 THEN 6100
  513. 6120   SYMBOL (480,45),"G1 十射",1,1,6,,,1
  514. 6130  GOTO 6220
  515. 6140 '--/GAME2用/--
  516. 6150   LINE (CX-1,CY)-(CX+1,371),PSET,%4,B          :'GAME2用
  517. 6160   CIRCLE (CX,CY),10,%6,,,,F
  518. 6170   PSET (CX,CY),%3
  519. 6180   Y=370 :I=1                                   :'土
  520. 6190   Y=Y+I :LINE (0,Y+I)-(550,Y+I),PSET,%7
  521. 6200   I=I+1 :IF (Y+I)<480 THEN 6190
  522. 6210   SYMBOL (480,45),"G2 遠射",1,1,6,,,1
  523. 6220 '---- 風力ゲージ ----
  524. 6230  SYMBOL (CX-180,2),"WIND",1,1,7,,,1
  525. 6240   FOR I=CX-100 TO CX+100 STEP 20
  526. 6250    IF I=CX THEN C=5 ELSE C=7
  527. 6260    LINE (I,0)-(I,20),PSET,C
  528. 6270   NEXT
  529. 6280 '---- 力ゲージ ----
  530. 6290  SYMBOL (570,50),"AIR",1,1,7,,,1,3
  531. 6300  SYMBOL (570,70),"Pressure",1,1,7,,,1
  532. 6310   FOR I=390 TO 90 STEP -20
  533. 6320    IF I<=150 THEN C=5 ELSE IF I>=310 THEN C=2 ELSE C=7
  534. 6330    LINE (580,I)-(630,I),PSET,C
  535. 6340   NEXT
  536. 6350 '---- 専用 ----
  537. 6360  IF FGO THEN A="互換モード" ELSE A="FASTモード"
  538. 6370  SYMBOL (560,440),A,1,1,6,,,5
  539. 6380  SYMBOL (560,460),ANA+"専用",1,1,6,,,5
  540. 6390 RETURN
  541. 6400 :
  542. 6410 '------------------------------------------------
  543. 6420 *各種前景                                     :'動く物(メーター)の表示
  544. 6430 '---- 風 ----
  545. 6440   W=INT(RND(1)*60)-30 :WC=CX-40
  546. 6450   LINE (CX-20+W,5)-(CX+20+W,15),PSET,2,BF
  547. 6460   GET@A (CX-40+W,5)-(CX+40+W,15),WIN
  548. 6470 '---- 力 ----
  549. 6480   LINE (600,390)-(620,470),PSET,4,BF
  550. 6490   GET@A (600,380)-(620,480),PW
  551. 6500   P=0 :PC=380 :POK=0
  552. 6510 RETURN
  553. 6520 :
  554. 6530 :
  555. 6540 :
  556. 6550 :
  557. 6560 '============  GAME 本  体  =============
  558. 6570 *開始
  559. 6580 'FF(0=QKS 1=QKR) / FM(OUTエリア) / FT(TESTモード) / FG(GAME番号)
  560. 6590  TEN(0)=0 :TEN(1)=0 :TEN(2)=200         :'総得点/HIGHスコア/LOWスコア
  561. 6600  ATEN(22)="" :HI(21)=-1                 :'G1 撃墜シール /ワーク
  562. 6610  ATEN2(22)=""                           :'G2 撃墜
  563. 6620  FOR I=0 TO 2:HI2(21,I)=0 :NEXT         :'G2 LEVEL/回数/Double
  564. 6630  LV=0 :CM=6 :CC=CM                      :'G2 レベル/回数/ワーク
  565. 6640  INTERVAL 1                             :'1秒毎の割り込み
  566. 6650  ON INTERVAL GOSUB *風・力              :'  >>風と力の強さ
  567. 6660  INTERVAL ON                            :'割り込み開始
  568. 6670  IF FT=0 THEN F=0 :GOSUB *合図          :'スタート合図/TEST中止
  569. 6680  CT=0                                   :'試技回数クリア
  570. 6690  IF FG=1 THEN GOSUB *本体1              :'ゲーム1本体
  571. 6700  IF FG=2 THEN GOSUB *本体2              :'ゲーム2本体
  572. 6710  IF FT=0 THEN F=2 :GOSUB *合図          :'終了合図
  573. 6720  INTERVAL OFF                           :'割り込み禁止
  574. 6730 RETURN                                  :'メインに戻る
  575. 6740 :
  576. 6750 *本体1                                  :'GAME1本体  
  577. 6760  CT=CT+1                                :'試技回数を増やす 
  578. 6770  GOSUB *総得点1                         :'現在の点数表示
  579. 6780  IF CT>KAISU THEN ATEN(0)=DATE$+" "+TIME$ :RETURN :'終了なら日時を記録して戻る
  580. 6790  GOSUB *試技                            :'試技数を表示
  581. 6800  IF CT>KAISU-2 AND HI(10)<TEN(0) THEN PCMPLAY SND8,127 :'応援
  582. 6810  IF FF THEN GOSUB *QKR専用 ELSE GOSUB *QKS専用
  583. 6820 GOTO 6760
  584. 6830 :
  585. 6840 *本体2                                  :'GAME2本体  
  586. 6850  CT=CT+1 :CC=CC-1                       :'試技回数を増やす 
  587. 6860  GOSUB *総得点2                         :'現在の点数表示
  588. 6870  IF CC<1 THEN ATEN2(0)=DATE$+" "+TIME$ :RETURN :'終了なら日時を記録して戻る
  589. 6880  GOSUB *試技                            :'試技数を表示
  590. 6890  IF FF THEN GOSUB *QKR専用 ELSE GOSUB *QKS専用
  591. 6900 GOTO 6850
  592. 6910 :
  593. 6920 *QKR専用
  594. 6930  T=PTRIG(1)                                   :'トリガの入力
  595. 6940   IF T=1 AND POK=1 THEN GOSUB *発射 :RETURN   :'[A]なら発射
  596. 6950   IF T=2 AND POK=0 THEN GOSUB *力             :'[B]なら力 
  597. 6960    FOR I=1 TO 15+FF*10                        :'動きを遅くする
  598. 6970     T=PAD(1)                                  :'パッドの入力
  599. 6980    NEXT
  600. 6990   IF POK=0 THEN 7020                          :'SロックONならJMP
  601. 7000   SX=SX-(T=2)-(T=3)-(T=4)+(T=6)+(T=7)+(T=8)   :'照準の座標を変える
  602. 7010   SY=SY+(T=1)+(T=2)-(T=4)-(T=5)-(T=6)+(T=8)
  603. 7020   IF FT THEN 7040                               :'テストモード
  604. 7030   SX=SX+INT(RND(1)*3)-1 :SY=SY+INT(RND(1)*3)-1  :'手振れを起こす
  605. 7040    IF SX<10  THEN SX=10                 :'照準が画面を出ないように調整
  606. 7050    IF SX>430 THEN SX=430
  607. 7060    IF SY<50  THEN SY=50
  608. 7070    IF SY>370 THEN SY=370
  609. 7080   PUT@A (SX,SY)-(SX+140,SY+120),SYO,,,,,POK*2200  :'照準を描く
  610. 7090 GOTO 6930                                      :'トリガ入力へ
  611. 7100 :
  612. 7110 *QKS専用
  613. 7120  T=PTRIG(1)                                    :'トリガの入力
  614. 7130   IF T=1 AND POK=1 THEN GOSUB *発射 :RETURN    :'[A]なら発射
  615. 7140   IF T=2 AND POK=0 THEN GOSUB *力 :T=T*333/333 :GOTO 7120 :'[B]なら力 
  616. 7150  T=PAD(1)                                      :'パッドの入力
  617. 7160   IF POK=0 THEN 7190                           :'SロックONならJMP
  618. 7170   SX=SX+2*(-(T=2)-(T=3)-(T=4)+(T=6)+(T=7)+(T=8)) :'照準の座標を変える
  619. 7180   SY=SY+2*((T=1)+(T=2)-(T=4)-(T=5)-(T=6)+(T=8))
  620. 7190   SX=SX+INT(RND(1)*5)-2 :SY=SY+INT(RND(1)*5)-2  :'手振れを起こす
  621. 7200    IF SX<10  THEN SX=10                 :'照準が画面を出ないように調整
  622. 7210    IF SX>430 THEN SX=430
  623. 7220    IF SY<50  THEN SY=50
  624. 7230    IF SY>370 THEN SY=370
  625. 7240   PUT@A (SX,SY)-(SX+140,SY+120),SYO,,,,,POK*2200  :'照準を描く
  626. 7250 GOTO 7120                                      :'トリガ入力へ
  627. 7260 :
  628. 7270 *力                                     :'力ゲージを動かす(力を溜める)
  629. 7280  P=P+.5! :IF P>300 THEN P=300 :POK=1    :'マンタンでロック解除
  630. 7290  PUT@A (600,PC-P)-(620,PC-P+100),PW
  631. 7300 RETURN
  632. 7310 :
  633. 7320 *風・力                                 :'1秒割り込みによる変化
  634. 7330  R=INT(RND(1)*30)-15                    :'風の強さを変える
  635. 7340   W=W+R
  636. 7350   IF FT THEN W=0                        :'テストモード
  637. 7360   PUT@A (WC+W,5)-(WC+W+80,15),WIN       :'ゲージを動かす
  638. 7370   IF ABS(W)>80 THEN *強風               :'ゲージOVERで強風SUBへ
  639. 7380  IF FT THEN RETURN                      :'テストモード
  640. 7390  P=P-10                                 :'力を弱める
  641. 7400   IF P<0 THEN P=0
  642. 7410   PUT@A (600,PC-P)-(620,PC-P+100),PW    :'ゲージを動かす
  643. 7420   IF P<100 THEN POK=0                   :'力弱いとセーフディロック掛ける
  644. 7430 RETURN
  645. 7440 :
  646. 7450 *強風                                   :'強風時の処理
  647. 7460  INTERVAL OFF                           :'割り込み禁止
  648. 7470  PCMPLAY SND3,127                       :'強風の音
  649. 7480  LINE (0,0)-(639,479),PRESET,,BF        :'照準等を消す
  650. 7490  F=1 :GOSUB *合図                       :'中止の旗出す
  651. 7500  W=INT(RND(1)*40)-20                    :'新規に風/力をセット
  652. 7510  P=0 :GOSUB *風・力                     :'ゲージを表示
  653. 7520  INTERVAL ON                            :'割り込み開始
  654. 7530  T=TEN(1)                               :'スコア表示時の調整
  655. 7540  IF FG=1 THEN GOSUB *試技 :GOSUB *総得点1 :'点、試技回数表示
  656. 7550  IF FG=2 THEN GOSUB *試技 :GOSUB *総得点2
  657. 7560 RETURN
  658. 7570 :
  659. 7580 *発射                                   :'弾の発射処理
  660. 7590  INTERVAL OFF                           :'割り込み禁止
  661. 7600  T=INT(RND(1)*6)+1                      :'ガンの種類
  662. 7610  IF T>3 THEN T=1                        :'玉の確率
  663. 7620  ON T GOTO 7630,7640,7650               :'飛んでいく音
  664. 7630  PCMPLAY SND1,127 :GOTO 7660            :'ピョーン
  665. 7640  PCMPLAY SND9,127 :GOTO 7660            :'GUN
  666. 7650  PCMPLAY SND10,127                      :'HIT4
  667. 7660  LINE (SX,SY)-(SX+120,SY+120),PRESET,,BF  :'照準消し
  668. 7670  YX=SX+40 :YY=SY+30                     :'照準位置より弾の座標を計算
  669. 7680   FOR I=15 TO 1 STEP -1                 :'弾飛ばす
  670. 7690    ON T GOTO 7700,7740,7780
  671. 7700    IF I>11 THEN YY=YY-8                 :'弾のノーマルな飛び方-37
  672. 7710    IF I>9 THEN YY=YY-5
  673. 7720    IF I<6 THEN YY=YY+5
  674. 7730   GOTO 7800
  675. 7740    IF I>10 THEN YY=YY+1                 :'弾(ガン)の飛び方
  676. 7750    IF I<8 THEN YY=YY-3
  677. 7760    IF I<4 THEN YY=YY-7
  678. 7770   GOTO 7800
  679. 7780    YY=YY-2                              :'大砲の飛び方
  680. 7790    IF I>8 THEN YY=YY-1
  681. 7800    YX=YX+(W/10) :YY=YY+15-(P \ 20)      :'風と力の影響を計算
  682. 7810    II=I-1
  683. 7820    PUT@A (YX,YY)-(YX+YS,YY+YS),YA,,,,,II*OO  :'弾表示
  684. 7830    WAIT 10
  685. 7840   NEXT
  686. 7850  IF FS THEN IF INT(RND(1)*10)=0 THEN 7600 :'二段打ちの確率
  687. 7860  TX=YX+YS/2 :TY=YY+YS/2                 :'着弾点計算
  688. 7870  SCREEN 1,0,3,1 :PSET (TX,TY),7         :'跡をマーク
  689. 7880   PSET (TX+1,TY),7 :PSET (TX-1,TY),7
  690. 7890   PSET (TX,TY+1),7 :PSET (TX,TY-1),7
  691. 7900  SCREEN 1,1,3,1
  692. 7910  LINE (YX,YY)-(YX+YS,YY+YS),PRESET,,BF   :'弾消し
  693. 7920  IF FG=2 THEN *得点計算2
  694. 7930 :
  695. 7940 *得点計算1
  696. 7950  T=INT(SQR((CX-(TX))^2+(CY-(TY))^2))     :'得点計算
  697. 7960  IF T=0 THEN F=3 :GOSUB *合図 :GOTO 8010 :'ド真ん中に命中/歓声
  698. 7970  IF T>0 AND T<12 THEN PCMPLAY SND2,127   :'高得点時に拍手 80以上
  699. 7980  IF T>50 AND T<81 THEN PCMPLAY SND4,127  :'0点時に笑い
  700. 7990  IF T>70 THEN PCMPLAY SND6,127           :'大きく外れた 破壊
  701. 8000  WAIT 100
  702. 8010  IF T=0 THEN ATEN(22)=ATEN(22)+"*"       :'撃墜シール
  703. 8020  IF T=1 THEN ATEN(22)=ATEN(22)+"O" 
  704. 8030  IF T>1 AND T<7 THEN ATEN(22)=ATEN(22)+"+"
  705. 8040  IF T>80 THEN ATEN(22)=ATEN(22)+"-"
  706. 8050  WAIT 100
  707. 8060  IF T>80 THEN T=-T  :GOTO *減点         :'大きく外れた
  708. 8070  IF T>70 THEN T=-50 :GOTO *減点         :'中外れ
  709. 8080  IF T=0  THEN T=150 :GOTO 8100          :'度真ん中 ボーナス点
  710. 8090  IF T<51 THEN T=102-T*2 ELSE T=0        :'得点計算
  711. 8100  SYMBOL (TX,TY),STR$(T),1,1,6,,,1       :'点表示
  712. 8110  GET@A (TX,TY)-(TX+64,TY+15),TN         :'点数 配列にセット
  713. 8120   FOR I=0 TO 150                        :'点移動表示
  714. 8130    PUT@A (TX+I,TY-I)-(TX+I+64,TY-I+15),TN :WAIT 2
  715. 8140   NEXT
  716. 8150  LINE (TX+150,TY-150)-(TX+214,TY-135),PRESET,,BF :'点消し
  717. 8160  TEN(0)=TEN(0)+T                        :'得点加算
  718. 8170  WAIT 100
  719. 8180  LINE (580,80)-(630,479),PRESET,,BF     :'力消し/初期化
  720. 8190   P=0 :POK=0 : PUT@A (600,PC-P)-(620,PC-P+100),PW
  721. 8200   SX=INT(RND(1)*350)+100 :SY=100        :'照準の初期化
  722. 8210  INTERVAL ON
  723. 8220 RETURN
  724. 8230 :
  725. 8240 *減点
  726. 8250  IF T<-50 THEN PCMPLAY SND11,127      :'大きく外 救急車
  727. 8260  FOR I=1 TO 6
  728. 8270   SYMBOL (TX,TY),STR$(T),1,1,6,,XOR   :'点表示
  729. 8280   WAIT 50
  730. 8290  NEXT
  731. 8300 GOTO 8160
  732. 8310 :
  733. 8320 *得点計算2   :'GAME2用
  734. 8330  T=INT(SQR((CX-(TX))^2+(CY-(TY))^2))  :'得点計算
  735. 8340  IF T>=45 THEN PCMPLAY SND13,127      :'危ない
  736. 8350  IF T>30 AND T<45 THEN PCMPLAY SND4,127  :'笑い
  737. 8360  IF T>10 AND T<13 THEN WAIT 50 :PCMPLAY SND12,127 :'おしい
  738. 8370  IF T>10 THEN WAIT 200 :GOTO 8730     :'外れ -- JMP
  739. 8380   PCMPLAY SND6,127                    :'/破壊音
  740. 8390   SCREEN 1,0,3,1
  741. 8400    FOR I0=50 TO 300 STEP 50           :'破壊画像
  742. 8410     I1=I0/2
  743. 8420     FOR I=1 TO 250
  744. 8430      PSET(CX+RND(1)*I0-I1,CY+RND(1)*I0-I1),%6,XOR
  745. 8440     NEXT
  746. 8450    NEXT
  747. 8460   WAIT 100
  748. 8470   IF T<>0 THEN 8540       :'真ん中
  749. 8480     PCMPLAY SND4,127
  750. 8490     FOR I=1 TO 8
  751. 8500      SYMBOL (CX+20,CY+20),"ど.ど.ど真ん中ー!",1,1,7,,XOR,1 :WAIT 50
  752. 8510     NEXT
  753. 8520     LV=LV+5 :ATEN2(22)=ATEN2(22)+"*"
  754. 8530     HI2(21,2)=HI2(21.2!)+1
  755. 8540   IF CC<>CM-1 THEN 8590   :'ダブル
  756. 8550     FOR I=1 TO 5
  757. 8560      SYMBOL (CX+20,CY+20),"DOUBLE UP!",1,1,7,,XOR,1 :WAIT 50
  758. 8570     NEXT
  759. 8580     LV=LV+1 :HI2(21,2)=HI2(21,2)+1
  760. 8590   WAIT 100
  761. 8600 '的を書き直し
  762. 8610   LINE (0,85)-(550,479),PRESET,,BF
  763. 8620   LINE (CX-1,CY)-(CX+1,371),PSET,%4,B   :'的
  764. 8630   CIRCLE (CX,CY),10,%6,,,,F
  765. 8640   Y=370 :I=1
  766. 8650   Y=Y+I :LINE (0,Y+I)-(550,Y+I),PSET,%7 :'土
  767. 8660   I=I+1 :IF (Y+I)<480 THEN 8650
  768. 8670   SYMBOL (0,465),"尋燐・ルナ",1,1,%5,,,1
  769. 8680  SCREEN 1,1,3,1
  770. 8690  LV=LV+1                    :'レベルアップ
  771. 8700   IF LV>3 THEN CM=5
  772. 8710  CC=CM                      :'カウンタ戻す
  773. 8720 :
  774. 8730  LINE (580,80)-(630,479),PRESET,,BF     :'力消し/初期化
  775. 8740   P=0 :POK=0 : PUT@A (600,PC-P)-(620,PC-P+100),PW
  776. 8750   SX=INT(RND(1)*350)+100 :SY=100        :'照準の初期化
  777. 8760  INTERVAL ON
  778. 8770 RETURN
  779. 8780 :
  780. 8790 *合図                                   :'合図の旗を振る
  781. 8800  INTERVAL OFF                           :'割り込み禁止
  782. 8810  IF F<>1 THEN PCMPLAY SND5,127          :'歓声
  783. 8820   FOR I=639 TO -300 STEP -1 
  784. 8830     IF FF THEN WAIT 1                   :'速ければWAIT
  785. 8840     PUT@A (I,90)-(I+280,210),HATA,,,,,F*4500
  786. 8850   NEXT
  787. 8860  INTERVAL ON                            :'割り込み開始 
  788. 8870 RETURN
  789. 8880 :
  790. 8890 *試技                                   :'回数表示
  791. 8900  LINE (450,10)-(550,40),PRESET,,BF
  792. 8910  A=RIGHT$(" "+STR$(CT),2)
  793. 8920  SYMBOL (493,19),A,2,1,6,,,5
  794. 8930 RETURN
  795. 8940 :
  796. 8950 *総得点1                                 :'GAME1/現在の得点を表示
  797. 8960  IF CT=1 THEN RETURN
  798. 8970  SCREEN 1,0,3,1                          :'画面設定 背景をアクティブに
  799. 8980  LINE (160,27)-(445,67),PRESET,,BF
  800. 8990  IF TEN(1)<T THEN TEN(1)=T               :'LOWスコア更新
  801. 9000  IF TEN(2)>T THEN TEN(2)=T               :'HIGHスコア更新
  802. 9010  SYMBOL (120,27),"現在の得点:      AVE.:     H:    L:",1,1,7,,,1
  803. 9020  SYMBOL (208,27),STR$(TEN(0)),1,1,4        :'点数
  804. 9030  SYMBOL (295,27),STR$(INT(TEN(0)*10/(CT-1))/10),1,1,4 :'平均
  805. 9040  SYMBOL (348,27),STR$(TEN(1)),1,1,4        :'HIGH
  806. 9050  SYMBOL (400,27),STR$(TEN(2)),1,1,4        :'LOW
  807. 9060 :I=20                                      :'以下順位 
  808. 9070  IF I<1 THEN I=1 ELSE IF TEN(0)>HI(I) THEN I=I-1 :GOTO 9070 ELSE I=I+1
  809. 9080  SYMBOL (120,45),"順位:        toTOP:       toNEXT:",1,1,7,,,1
  810. 9090  IF I=1 THEN SYMBOL (162,45),"TOP!",1,1,4 :GOTO 9120
  811. 9100  IF I=21 THEN SYMBOL (162,45),"番外",1,1,4 :GOTO 9120
  812. 9110  SYMBOL (162-16,45),AKCNV$(STR$(I))+"位",1,1,4
  813. 9120 :SYMBOL (274,45),STR$(HI(1)-TEN(0)),1,1,4    :'トップとの差
  814. 9130 :I=I-1 :IF I<2 THEN I=1
  815. 9140  SYMBOL (386,45),STR$(HI(I)-TEN(0)),1,1,4    :'次へ
  816. 9150  SCREEN 1,1,3,1                          :'画面設定 前景をアクティブに
  817. 9160 RETURN
  818. 9170 :
  819. 9180 *総得点2                                 :'GAME2/現在の得点を表示
  820. 9190  SCREEN 1,0,3,1                          :'画面設定 背景をアクティブに
  821. 9200  LINE (160,27)-(445,67),PRESET,,BF
  822. 9210  SYMBOL (150,27),"現在のレベル:"+STR$(LV),1,1,7,,,1
  823. 9220  SYMBOL (150,45),"残りのの回数:"+STR$(CC),1,1,7,,,1
  824. 9230 :I=20                                    :'以下順位 
  825. 9240  IF I<1 THEN I=1 :GOTO 9290
  826. 9250   IF LV>HI2(I,0) THEN I=I-1 :GOTO 9240
  827. 9260   IF LV<HI2(I,0) THEN I=I+1 :GOTO 9290
  828. 9270   I=I+1
  829. 9280 :
  830. 9290  SYMBOL (300,27),"順位:",1,1,7,,,1
  831. 9300  IF I=1 THEN SYMBOL (350,27),"TOP!",1,1,4 :GOTO 9330
  832. 9310  IF I=21 THEN SYMBOL (350,27),"番外",1,1,4 :GOTO 9330
  833. 9320  SYMBOL (350,27),AKCNV$(STR$(I))+"位",1,1,4
  834. 9330 :SYMBOL (300,45),"TOP:"+STR$(HI2(1,0))+"/"+STR$(HI2(2,0))+"/"+STR$(HI2(3,0)),1,1,7,,,1
  835. 9340  SCREEN 1,1,3,1                          :'画面設定 前景をアクティブに
  836. 9350 RETURN
  837. 9360 :
  838. 9370 '--------------------------------------
  839. 9380 *MENU2       :'ポンポンについて
  840. 9390  X0=30 :Y0=210
  841. 9400  X=X0 :Y=Y0 :X1=X+220 :Y1=Y+200 :GOSUB *K_SUB1
  842. 9410  X=X+10 :Y=Y+5 :X1=X+120 :Y1=Y+20 :GOSUB *K_SUB1
  843. 9420  SYMBOL (X+5,Y+2),"ポンポンとは?",1,1,%108,,,1
  844. 9430  A="我が家の子供は2才の頃、よく公園に落ちていたエアーガンの弾(BB弾)を拾ってきては遊んでいました。私が「それはなーに?」と質問したところ、返ってきた答えが「ポンポン」でした。"
  845. 9440 GOTO *MES_S
  846. 9450 :
  847. 9460 '--------------------------------------
  848. 9470 *MENU3       :'ゲームについて
  849. 9480  X0=50 :Y0=220
  850. 9490  X=X0 :Y=Y0 :X1=X+220 :Y1=Y+220 :GOSUB *K_SUB1
  851. 9500  X=X+10 :Y=Y+5 :X1=X+140 :Y1=Y+20 :GOSUB *K_SUB1
  852. 9510  SYMBOL (X+5,Y+2),"ゲームについて",1,1,%108,,,1
  853. 9520  A="本来5つほどのゲームが有ったのですが機種限定・著作権・未完成等により今回は2作品のみになっています。簡単ですが数人集まると燃えるかもしれません。今回の応募も友人のプッシュです。説明は各ステージにて。"
  854. 9530 GOTO *MES_S
  855. 9540 :
  856. 9550 '--------------------------------------
  857. 9560 *MENU4       :'ガンについて
  858. 9570  X0=70 :Y0=230
  859. 9580  X=X0 :Y=Y0 :X1=X+220 :Y1=Y+200 :GOSUB *K_SUB1
  860. 9590  X=X+10 :Y=Y+5 :X1=X+140 :Y1=Y+20 :GOSUB *K_SUB1
  861. 9600  SYMBOL (X+5,Y+2),"ガンの取扱説明書",1,1,%108,,,1
  862. 9610  A="ここで使うガンはエアーガンです。パッドの「B」ボタンでエアー圧を上げます。マンタンになるとセーフティロックが解除になり照準が動かせます。そして「A」ボタンで発射します。エアーは安全の為時間と共に抜けていきます。"
  863. 9620  GOSUB *MES_S
  864. 9630  X=X0 :Y=Y0 :X1=X+220 :Y1=Y+200 :GOSUB *K_SUB1
  865. 9640  X=X+10 :Y=Y+5 :X1=X+100 :Y1=Y+20 :GOSUB *K_SUB1
  866. 9650  SYMBOL (X+5,Y+2),"ガンの特性",1,1,%108,,,1
  867. 9660  A="使用している弾はプラスチックなので風と打ち出す力にかなり左右されます。またときたまホップしたり二段打ちになったりもしますが、これはたんなる見た目だけの問題で結果には影響いたしません。"
  868. 9670 GOTO *MES_S
  869. 9680 :
  870. 9690 '--------------------------------------
  871. 9700 *MENU5       :'速度について
  872. 9710  X0=90 :Y0=240
  873. 9720  X=X0 :Y=Y0 :X1=X+220 :Y1=Y+200 :GOSUB *K_SUB1
  874. 9730  X=X+10 :Y=Y+5 :X1=X+140 :Y1=Y+20 :GOSUB *K_SUB1
  875. 9740  SYMBOL (X+5,Y+2),"動作速度について",1,1,%108,,,1
  876. 9750  A="本来この手のソフトはスプライトを使うべきところなのですが、マシンパワーのお蔭でPUT@でもそこそこ動いてしまいました。しかしその弊害として機種による速度差の調整がとても難しくなってしまいました。"
  877. 9760  GOSUB *MES_S
  878. 9770  X=X0 :Y=Y0 :X1=X+220 :Y1=Y+200 :GOSUB *K_SUB1
  879. 9780  X=X+10 :Y=Y+5 :X1=X+140 :Y1=Y+20 :GOSUB *K_SUB1
  880. 9790  SYMBOL (X+5,Y+2),"速度調整について",1,1,%108,,,1
  881. 9800  A="設定には2種類有ります。 1.互換モードにする。  2.各機種に合わせる   ですが各機種全てを調整できる筈もなく機種により難易度が変わってしまいました。MAでベストになっています。"
  882. 9810 GOTO *MES_S
  883. 9820 :
  884. 9830 '--------------------------------------
  885. 9840 *MES_S
  886. 9850  I0=INT(LEN(A)/26)
  887. 9860   FOR I=0 TO I0
  888. 9870    SYMBOL (X0+5,Y+30+I*20),MID$(A,1+26*I,26),1,1,%57,,,1
  889. 9880   NEXT
  890. 9890  WAIT 10
  891. 9900  IF PTRIG(1)<>1 AND INKEY$="" THEN 9900
  892. 9910 RETURN
  893. 9920 :
  894. 9930 '--------------------------------------
  895. 9940 *M_終了       :'終了
  896. 9950  X0=170 :Y0=370
  897. 9960  X=X0 :Y=Y0 :X1=X+230 :Y1=Y+80 :GOSUB *K_SUB1
  898. 9970   IF F THEN PCMPLAY SND7,127                       :'おつかれ
  899. 9980   SYMBOL (X0+5,Y0+20),"ま た ね ー !",2,2,%99,,,1
  900. 9990   SYMBOL (X0+60,Y0+55),"ヾ(^_^) バーイ",1,1,%125,,,1
  901. 10000 RETURN
  902. 10010 :
  903. 10020 '------------------------------------
  904. 10030 *アバウトメッセージ
  905. 10040  FOR X=0 TO 500 STEP 20 :WAIT 1 :Y=50+X/10 : LINE (X,Y)-(X+30,Y+80),PRESET,,BF :NEXT
  906. 10050  FOR X=500 TO 150 STEP -20 :WAIT 1 :Y=100+70-X/10 : LINE (X,Y)-(X+30,Y+80),PRESET,,BF :NEXT
  907. 10060  FOR X=150 TO 500 STEP 20 :WAIT 1 :Y=160+X/10 : LINE (X,Y)-(X+30,Y+80),PRESET,,BF :NEXT
  908. 10070  FOR X=500 TO 150 STEP -20 :WAIT 1 :Y=270-X/10 : LINE (X,Y)-(X+30,Y+80),PRESET,,BF :NEXT
  909. 10080  FOR X=150 TO 500 STEP 20 :WAIT 1 :Y=260+X/10 : LINE (X,Y)-(X+30,Y+80),PRESET,,BF :NEXT
  910. 10090  RESTORE 10090 :X=220 :Y=120 :C=100
  911. 10100  READ A :IF A="END" THEN A=INPUT$(1) :RETURN
  912. 10110  SYMBOL (X,Y),A,1,1,%C,,,5
  913. 10120  Y=Y+20 :C=C+1 :GOTO 10100 
  914. 10130 :
  915. 10140 DATA "アバウト各局の皆さーん!",""
  916. 10150 DATA "Oo。(^。^)y-゚゚  お元気ですかー。"
  917. 10160 DATA "今年も移動運用しましょうねー。"
  918. 10170 DATA "海に山に各局の家に...."
  919. 10180 DATA "宜しくネ(^_^)",""
  920. 10190 DATA "    from JG0QKR"
  921. 10200 DATA "             and JI0FLS"
  922. 10210 DATA "         紀之"
  923. 10220 DATA "                 雅之"
  924. 10230 DATA "                 佳奈"
  925. 10240 DATA "END"
  926. 10250 :
  927. 10260 '======================= E N D =============================
  928.